home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1995 August / macformat-027.iso / mac / Shareware City / Developers / Oberon⁄F / Mac / Mod / MemoryMgr (.txt) < prev    next >
Encoding:
Oberon Document  |  1994-06-07  |  13.8 KB  |  505 lines  |  [oODC/obnF]

  1. Documents.StdDocumentDesc
  2. Documents.DocumentDesc
  3. Containers.ViewDesc
  4. Views.ViewDesc
  5. Stores.StoreDesc
  6. Documents.ModelDesc
  7. Containers.ModelDesc
  8. Models.ModelDesc
  9. Stores.ElemDesc
  10. TextViews.StdViewDesc
  11. TextViews.ViewDesc
  12. TextModels.StdModelDesc
  13. TextModels.ModelDesc
  14. TextModels.AttributesDesc
  15. Geneva
  16. Geneva
  17. StdStamps.StdViewDesc
  18. Geneva
  19. Geneva
  20. MODULE MacMemoryMgr;
  21. (* cp 
  22.     IMPORT SYSTEM, MacTypes;
  23.     CONST
  24.         CODE = 1; NOSTKCHK = 4;
  25.         D0 = 0; A0 = 8; A1 = 9;
  26.         ApplLimit = 130H;
  27.         SysZone = 2A6H;
  28.         AppZone = 2AAH;
  29.         GZRootHnd = 328H;
  30.         MemTop = 108H;
  31.     TYPE
  32.         Ptr* = MacTypes.Ptr;
  33.         Handle* = MacTypes.Handle;
  34.         Size* = LONGINT;
  35.         Zone* = RECORD (MacTypes.Data)
  36.             bkLim*: Ptr;
  37.             purgePtr: Ptr;
  38.             hFstFree*: Ptr;
  39.             zcbFree*: LONGINT;
  40.             gzProc*: MacTypes.ProcPtr;
  41.             moreMast*: INTEGER;
  42.             flags: MacTypes.Set;
  43.             cntRel, maxRel, cntNRel, maxNRel, cntEmpty, cntHandles: INTEGER;
  44.             minCBFree: LONGINT;
  45.             purgeProc*: MacTypes.ProcPtr;
  46.             sparePtr, allocPtr: MacTypes.ProcPtr;
  47.             heapData*: INTEGER
  48.         END;
  49.         THz* = POINTER TO Zone;
  50.     VAR err*: INTEGER;
  51.     PROCEDURE [CODE] setApplBase 0A0H, 057H;
  52.     PROCEDURE [CODE] initZone 0A0H, 019H;
  53.     PROCEDURE [CODE] setApplLimit 0A0H, 02DH;
  54.     PROCEDURE [CODE] maxApplZone 0A0H, 063H;
  55.     PROCEDURE [CODE] moreMasters 0A0H, 036H;
  56.     PROCEDURE [CODE] getZone 0A1H, 01AH;
  57.     PROCEDURE [CODE] setZone 0A0H, 01BH;
  58.     PROCEDURE [CODE] newHandle 0A1H, 022H;
  59.     PROCEDURE [CODE] disposHandle 0A0H, 023H;
  60.     PROCEDURE [CODE] getHandleSize 0A0H, 025H;
  61.     PROCEDURE [CODE] setHandleSize 0A0H, 024H;
  62.     PROCEDURE [CODE] handleZone 0A1H, 026H;
  63.     PROCEDURE [CODE] recoverHandle 0A1H, 028H;
  64.     PROCEDURE [CODE] reallocHandle 0A0H, 027H;
  65.     PROCEDURE [CODE] newPtr 0A1H, 01EH;
  66.     PROCEDURE [CODE] newPtrClear 0A3H, 01EH;
  67.     PROCEDURE [CODE] disposPtr 0A0H, 01FH;
  68.     PROCEDURE [CODE] getPtrSize 0A0H, 021H;
  69.     PROCEDURE [CODE] setPtrSize 0A0H, 020H;
  70.     PROCEDURE [CODE] ptrZone 0A1H, 048H;
  71.     PROCEDURE [CODE] freeMem 0A0H, 01CH;
  72.     PROCEDURE [CODE] maxMem 0A1H, 01DH;
  73.     PROCEDURE [CODE] compactMem 0A0H, 04CH;
  74.     PROCEDURE [CODE] resrvMem 0A0H, 040H;
  75.     PROCEDURE [CODE] purgeMem 0A0H, 04DH;
  76.     PROCEDURE [CODE] emptyHandle 0A0H, 02BH;
  77.     PROCEDURE [CODE] hLock 0A0H, 029H;
  78.     PROCEDURE [CODE] hUnlock 0A0H, 02AH;
  79.     PROCEDURE [CODE] hPurge 0A0H, 049H;
  80.     PROCEDURE [CODE] hNoPurge 0A0H, 04AH;
  81.     PROCEDURE [CODE] setGrowZone 0A0H, 04BH;
  82.     PROCEDURE [CODE] blockMove 0A0H, 02EH;
  83.     PROCEDURE [CODE] moveHHi 0A0H, 064H;
  84.     PROCEDURE [CODE] handToHand 0A9H, 0E1H;
  85.     PROCEDURE [CODE] ptrToHand 0A9H, 0E3H;
  86.     PROCEDURE [CODE] ptrToXHand 0A9H, 0E2H;
  87.     PROCEDURE [CODE] handAndHand 0A9H, 0E4H;
  88.     PROCEDURE [CODE] ptrAndHand 0A9H, 0EFH;
  89.     PROCEDURE [CODE] maxBlock 0A0H, 061H;
  90.     PROCEDURE [CODE] purgeSpace 0A0H, 062H;
  91.     PROCEDURE [CODE] stackSpace 0A0H, 065H;
  92.     PROCEDURE [CODE] newEmptyHandle 0A0H, 066H;
  93.     PROCEDURE [CODE] hSetRBit 0A0H, 067H;
  94.     PROCEDURE [CODE] hClrRBit 0A0H, 068H;
  95.     PROCEDURE [CODE] hGetState 0A0H, 069H;
  96.     PROCEDURE [CODE] hSetState 0A0H, 06AH;
  97.     (** Initialization and Allocation **)
  98.     PROCEDURE [NOSTKCHK] SetApplBase* (startPtr: Ptr);
  99.     BEGIN 
  100.         SYSTEM.PUTREG(A0, startPtr); 
  101.         setApplBase;
  102.         SYSTEM.GETREG(D0, err)
  103.     END SetApplBase;
  104.     PROCEDURE [NOSTKCHK] InitZone* (pgrowZone: MacTypes.ProcPtr; 
  105.                             cmoreMasters: INTEGER; limitPtr, startPtr: Ptr);
  106.     BEGIN
  107.         SYSTEM.PUTREG(A0, startPtr); 
  108.         initZone;
  109.         SYSTEM.GETREG(D0, err)
  110.     END InitZone;
  111.     PROCEDURE [NOSTKCHK] GetApplLimit* (): Ptr;
  112.         VAR ptr: Ptr;
  113.     BEGIN
  114.         SYSTEM.MOVE(ApplLimit, SYSTEM.ADR(ptr), 4);
  115.         RETURN ptr
  116.     END GetApplLimit;
  117.     PROCEDURE [NOSTKCHK] SetApplLimit* (zoneLimit: Ptr);
  118.     BEGIN
  119.         SYSTEM.PUTREG(A0, zoneLimit); 
  120.         setApplLimit;
  121.         SYSTEM.GETREG(D0, err)
  122.     END SetApplLimit;
  123.     PROCEDURE [NOSTKCHK] MaxApplZone*;
  124.     BEGIN
  125.         maxApplZone;
  126.         SYSTEM.GETREG(D0, err)
  127.     END MaxApplZone;
  128.     PROCEDURE [NOSTKCHK] MoreMasters*;
  129.     BEGIN
  130.         moreMasters;
  131.         SYSTEM.GETREG(D0, err)
  132.     END MoreMasters;
  133.     (** Heap Zone Access **)
  134.     PROCEDURE [NOSTKCHK] GetZone* (): THz;
  135.         VAR t: THz;
  136.     BEGIN
  137.         getZone;
  138.         SYSTEM.GETREG(D0, err);
  139.         SYSTEM.GETREG(A0, t);
  140.         RETURN t
  141.     END GetZone;
  142.     PROCEDURE [NOSTKCHK] SetZone* (hz: THz);
  143.     BEGIN
  144.         SYSTEM.PUTREG(A0, hz);
  145.         setZone;
  146.         SYSTEM.GETREG(D0, err)
  147.     END SetZone;
  148.     PROCEDURE [NOSTKCHK] SystemZone* (): THz;
  149.         VAR t: THz;
  150.     BEGIN
  151.         SYSTEM.MOVE(SysZone, SYSTEM.ADR(t), 4);
  152.         RETURN t
  153.     END SystemZone;
  154.     PROCEDURE [NOSTKCHK] ApplicZone* (): THz;
  155.         VAR t: THz;
  156.     BEGIN
  157.         SYSTEM.MOVE(AppZone, SYSTEM.ADR(t), 4);
  158.         RETURN t
  159.     END ApplicZone;
  160.     (** Allocating and Releasing Relocatable Blocks **)
  161.     PROCEDURE [NOSTKCHK] NewHandle* (byteCount: Size): Handle;
  162.         VAR h: Handle;
  163.     BEGIN
  164.         SYSTEM.PUTREG(D0, byteCount);
  165.         newHandle;
  166.         SYSTEM.GETREG(D0, err);
  167.         SYSTEM.GETREG(A0, h);
  168.         RETURN h
  169.     END NewHandle;
  170.     PROCEDURE [NOSTKCHK] DisposHandle* (h: Handle);
  171.     BEGIN
  172.         SYSTEM.PUTREG(A0, h);
  173.         disposHandle;
  174.         SYSTEM.GETREG(D0, err)
  175.     END DisposHandle;
  176.     PROCEDURE [NOSTKCHK] DisposeHandle* (h: Handle);
  177.     BEGIN
  178.         SYSTEM.PUTREG(A0, h);
  179.         disposHandle;
  180.         SYSTEM.GETREG(D0, err)
  181.     END DisposeHandle;
  182.     PROCEDURE [NOSTKCHK] GetHandleSize* (h: Handle): Size;
  183.         VAR res: LONGINT;
  184.     BEGIN
  185.         SYSTEM.PUTREG(A0, h);
  186.         getHandleSize;
  187.         SYSTEM.GETREG(D0, res);
  188.         IF res >= 0 THEN
  189.             err := 0
  190.         ELSE
  191.             err := SHORT(res); res := 0
  192.         END;
  193.         RETURN res
  194.     END GetHandleSize;
  195.     PROCEDURE [NOSTKCHK] SetHandleSize* (h: Handle; newSize: Size);
  196.     BEGIN
  197.         SYSTEM.PUTREG(A0, h);
  198.         SYSTEM.PUTREG(D0, newSize);
  199.         setHandleSize;
  200.         SYSTEM.GETREG(D0, err)
  201.     END SetHandleSize;
  202.     PROCEDURE [NOSTKCHK] HandleZone* (h: Handle): THz;
  203.         VAR t: THz;
  204.     BEGIN
  205.         SYSTEM.PUTREG(A0, h);
  206.         handleZone;
  207.         SYSTEM.GETREG(D0, err);
  208.         SYSTEM.GETREG(A0, t);
  209.         RETURN t
  210.     END HandleZone;
  211.     PROCEDURE [NOSTKCHK] RecoverHandle* (p: Ptr): Handle;
  212.         VAR h: Handle;
  213.     BEGIN
  214.         SYSTEM.PUTREG(A0, p);
  215.         recoverHandle;
  216.         err := 0;
  217.         SYSTEM.GETREG(A0, h);
  218.         RETURN h
  219.     END RecoverHandle;
  220.     PROCEDURE [NOSTKCHK] ReallocHandle* (h: MacTypes.Handle; byteCount: Size);
  221.     BEGIN
  222.         SYSTEM.PUTREG(A0, h);
  223.         SYSTEM.PUTREG(D0, byteCount);
  224.         reallocHandle;
  225.         SYSTEM.GETREG(D0, err)
  226.     END ReallocHandle;
  227.     (** Allocating and Releasing Nonrelocatable Blocks **)
  228.     PROCEDURE [NOSTKCHK] NewPtr* (byteCount: Size): Ptr;
  229.         VAR p: Ptr;
  230.     BEGIN
  231.         SYSTEM.PUTREG(D0, byteCount);
  232.         newPtr;
  233.         SYSTEM.GETREG(D0, err);
  234.         SYSTEM.GETREG(A0, p);
  235.         RETURN p
  236.     END NewPtr;
  237.     PROCEDURE [NOSTKCHK] NewPtrClear* (byteCount: Size): Ptr;
  238.         VAR p: Ptr;
  239.     BEGIN
  240.         SYSTEM.PUTREG(D0, byteCount);
  241.         newPtrClear;
  242.         SYSTEM.GETREG(D0, err);
  243.         SYSTEM.GETREG(A0, p);
  244.         RETURN p
  245.     END NewPtrClear;
  246.     PROCEDURE [NOSTKCHK] DisposPtr* (p: Ptr);
  247.     BEGIN
  248.         SYSTEM.PUTREG(A0, p);
  249.         disposPtr;
  250.         SYSTEM.GETREG(D0, err)
  251.     END DisposPtr;
  252.     PROCEDURE [NOSTKCHK] DisposePtr* (p: Ptr);
  253.     BEGIN
  254.         SYSTEM.PUTREG(A0, p);
  255.         disposPtr;
  256.         SYSTEM.GETREG(D0, err)
  257.     END DisposePtr;
  258.     PROCEDURE [NOSTKCHK] GetPtrSize* (p: Ptr): Size;
  259.         VAR res: LONGINT;
  260.     BEGIN
  261.         SYSTEM.PUTREG(A0, p);
  262.         getPtrSize;
  263.         SYSTEM.GETREG(D0, res);
  264.         IF res >= 0 THEN
  265.             err := 0
  266.         ELSE
  267.             err := SHORT(res); res := 0
  268.         END;
  269.         RETURN res
  270.     END GetPtrSize;
  271.     PROCEDURE [NOSTKCHK] SetPtrSize* (p: Ptr; newSize: Size);
  272.     BEGIN
  273.         SYSTEM.PUTREG(A0, p);
  274.         SYSTEM.PUTREG(D0, newSize);
  275.         setPtrSize;
  276.         SYSTEM.GETREG(D0, err)
  277.     END SetPtrSize;
  278.     PROCEDURE [NOSTKCHK] PtrZone* (p: Ptr): THz;
  279.         VAR t: THz;
  280.     BEGIN
  281.         SYSTEM.PUTREG(A0, p);
  282.         ptrZone;
  283.         SYSTEM.GETREG(D0, err);
  284.         SYSTEM.GETREG(A0, t);
  285.         RETURN t
  286.     END PtrZone;
  287.     (** Freeing Space in the Heap **)
  288.     PROCEDURE [NOSTKCHK] FreeMem* (): LONGINT;
  289.         VAR size: Size;
  290.     BEGIN
  291.         freeMem;
  292.         err := 0;
  293.         SYSTEM.GETREG(D0, size);
  294.         RETURN size
  295.     END FreeMem;
  296.     PROCEDURE [NOSTKCHK] MaxMem* (VAR grow: Size): Size;
  297.         VAR size: Size;
  298.     BEGIN
  299.         maxMem;
  300.         err := 0;
  301.         SYSTEM.GETREG(A0, grow);
  302.         SYSTEM.GETREG(D0, size);
  303.         RETURN size
  304.     END MaxMem;
  305.     PROCEDURE [NOSTKCHK] CompactMem* (cbNeeded: Size): Size;
  306.         VAR size: Size;
  307.     BEGIN
  308.         SYSTEM.PUTREG(D0, cbNeeded);
  309.         compactMem;
  310.         err := 0;
  311.         SYSTEM.GETREG(D0, size);
  312.         RETURN size
  313.     END CompactMem;
  314.     PROCEDURE [NOSTKCHK] ResrvMem* (cbNeeded: Size);
  315.     BEGIN
  316.         SYSTEM.PUTREG(D0, cbNeeded);
  317.         resrvMem;
  318.         SYSTEM.GETREG(D0, err)
  319.     END ResrvMem;
  320.     PROCEDURE [NOSTKCHK] PurgeMem* (cbNeeded: Size);
  321.     BEGIN
  322.         SYSTEM.PUTREG(D0, cbNeeded);
  323.         purgeMem;
  324.         SYSTEM.GETREG(D0, err)
  325.     END PurgeMem;
  326.     PROCEDURE [NOSTKCHK] EmptyHandle* (h: Handle);
  327.     BEGIN
  328.         SYSTEM.PUTREG(A0, h);
  329.         emptyHandle;
  330.         SYSTEM.GETREG(D0, err)
  331.     END EmptyHandle;
  332.     (** Properties of Relocatable Blocks **)
  333.     PROCEDURE [NOSTKCHK] HLock* (h: Handle);
  334.     BEGIN
  335.         SYSTEM.PUTREG(A0, h);
  336.         hLock;
  337.         SYSTEM.GETREG(D0, err)
  338.     END HLock;
  339.     PROCEDURE [NOSTKCHK] HUnlock* (h: Handle);
  340.     BEGIN
  341.         SYSTEM.PUTREG(A0, h);
  342.         hUnlock;
  343.         SYSTEM.GETREG(D0, err)
  344.     END HUnlock;
  345.     PROCEDURE [NOSTKCHK] HPurge* (h: Handle);
  346.     BEGIN
  347.         SYSTEM.PUTREG(A0, h);
  348.         hPurge;
  349.         SYSTEM.GETREG(D0, err)
  350.     END HPurge;
  351.     PROCEDURE [NOSTKCHK] HNoPurge* (h: Handle);
  352.     BEGIN
  353.         SYSTEM.PUTREG(A0, h);
  354.         hNoPurge;
  355.         SYSTEM.GETREG(D0, err)
  356.     END HNoPurge;
  357.     (** Grow Zone Operations **)
  358.     PROCEDURE [NOSTKCHK] SetGrowZone* (growZone: MacTypes.ProcPtr);
  359.     BEGIN
  360.         SYSTEM.PUTREG(A0, growZone);
  361.         setGrowZone;
  362.         SYSTEM.GETREG(D0, err)
  363.     END SetGrowZone;
  364.     PROCEDURE [NOSTKCHK] GZSaveHnd* (): Handle;
  365.         VAR h: Handle;
  366.     BEGIN
  367.         SYSTEM.MOVE(GZRootHnd, SYSTEM.ADR(h), 4);
  368.         RETURN h
  369.     END GZSaveHnd;
  370.     (** Miscellaneous Operations **)
  371.     PROCEDURE [NOSTKCHK] BlockMove* (srcPtr, destPtr: Ptr; byteCount: Size);
  372.     BEGIN
  373.         SYSTEM.PUTREG(A0, srcPtr);
  374.         SYSTEM.PUTREG(A1, destPtr);
  375.         SYSTEM.PUTREG(D0, byteCount);
  376.         blockMove;
  377.         SYSTEM.GETREG(D0, err)
  378.     END BlockMove;
  379.     PROCEDURE [NOSTKCHK] TopMem* (): Ptr;
  380.         VAR p: Ptr;
  381.     BEGIN
  382.         SYSTEM.MOVE(MemTop, SYSTEM.ADR(p), 4);
  383.         RETURN p
  384.     END TopMem;
  385.     PROCEDURE [NOSTKCHK] MoveHHi* (h: MacTypes.Handle);
  386.     BEGIN
  387.         SYSTEM.PUTREG(A0, h);
  388.         moveHHi;
  389.         SYSTEM.GETREG(D0, err)
  390.     END MoveHHi;
  391.     PROCEDURE [NOSTKCHK] MemError* (): MacTypes.OSErr;
  392.     BEGIN
  393.         RETURN err 
  394.     END MemError;
  395.     (** Pointer and Handle Manipulation **)
  396.     PROCEDURE [NOSTKCHK] HandToHand* (VAR theHndl: Handle): INTEGER; 
  397.     BEGIN
  398.         SYSTEM.PUTREG(A0, theHndl);
  399.         handToHand;
  400.         SYSTEM.GETREG(D0, err);
  401.         SYSTEM.GETREG(A0, theHndl);
  402.         RETURN err
  403.     END HandToHand;
  404.     PROCEDURE [NOSTKCHK] PtrToHand* (srcPtr: Ptr; VAR dstHndl: Handle; size: LONGINT): INTEGER;
  405.     BEGIN
  406.         SYSTEM.PUTREG(A0, srcPtr);
  407.         SYSTEM.PUTREG(D0, size);
  408.         ptrToHand;
  409.         SYSTEM.GETREG(D0, err);
  410.         SYSTEM.GETREG(A0, dstHndl);
  411.         RETURN err
  412.     END PtrToHand;
  413.     PROCEDURE [NOSTKCHK] PtrToXHand* (srcPtr: Ptr; dstHndl: Handle; size: LONGINT): INTEGER;
  414.     BEGIN
  415.         SYSTEM.PUTREG(A0, srcPtr);
  416.         SYSTEM.PUTREG(A1, dstHndl);
  417.         SYSTEM.PUTREG(D0, size);
  418.         ptrToXHand;
  419.         SYSTEM.GETREG(D0, err);
  420.         RETURN err
  421.     END PtrToXHand;
  422.     PROCEDURE [NOSTKCHK] HandAndHand* (hand1, hand2: Handle): INTEGER;
  423.     BEGIN
  424.         SYSTEM.PUTREG(A0, hand1);
  425.         SYSTEM.PUTREG(A1, hand2);
  426.         handAndHand;
  427.         SYSTEM.GETREG(D0, err);
  428.         RETURN err
  429.     END HandAndHand;
  430.     PROCEDURE [NOSTKCHK] PtrAndHand* (pntr: Ptr; hndl: Handle; size: LONGINT): INTEGER;
  431.     BEGIN
  432.         SYSTEM.PUTREG(D0, size);
  433.         SYSTEM.PUTREG(A0, pntr);
  434.         SYSTEM.PUTREG(A1, hndl);
  435.         ptrAndHand;
  436.         SYSTEM.GETREG(D0, err);
  437.         RETURN err
  438.     END PtrAndHand;
  439.     (** **)
  440.     PROCEDURE [NOSTKCHK] MaxBlock* (): LONGINT;
  441.         VAR res: LONGINT;
  442.     BEGIN
  443.         maxBlock;
  444.         SYSTEM.GETREG(D0, res);
  445.         RETURN res
  446.     END MaxBlock;
  447.     PROCEDURE [NOSTKCHK] PurgeSpace* (VAR total, contig: LONGINT);
  448.     BEGIN
  449.         purgeSpace;
  450.         SYSTEM.GETREG(D0, total);
  451.         SYSTEM.GETREG(A0, contig)
  452.     END PurgeSpace;
  453.     PROCEDURE [NOSTKCHK] StackSpace* (): LONGINT;
  454.     BEGIN
  455.         stackSpace;
  456.         SYSTEM.GETREG(D0, err)
  457.     END StackSpace;
  458.     PROCEDURE [NOSTKCHK] NewEmptyHandle* (): Handle;
  459.         VAR h: Handle;
  460.     BEGIN
  461.         newEmptyHandle;
  462.         SYSTEM.GETREG(D0, err);
  463.         SYSTEM.GETREG(A0, h);
  464.         RETURN h
  465.     END NewEmptyHandle;
  466.     PROCEDURE [NOSTKCHK] HSetRBit* (h: Handle);
  467.     BEGIN
  468.         SYSTEM.PUTREG(A0, h);
  469.         hSetRBit;
  470.         SYSTEM.GETREG(D0, err)
  471.     END HSetRBit;
  472.     PROCEDURE [NOSTKCHK] HClrRBit* (h: Handle);
  473.     BEGIN
  474.         SYSTEM.PUTREG(A0, h);
  475.         hClrRBit;
  476.         SYSTEM.GETREG(D0, err)
  477.     END HClrRBit;
  478.     PROCEDURE [NOSTKCHK] HGetState* (h: Handle): MacTypes.Set;
  479.         VAR s: MacTypes.Set;
  480.     BEGIN
  481.         SYSTEM.PUTREG(A0, h);
  482.         hGetState;
  483.         SYSTEM.GETREG(D0, s);
  484.         RETURN s
  485.     END HGetState;
  486.     PROCEDURE [NOSTKCHK] HSetState* (h: Handle; flags: MacTypes.Set);
  487.     BEGIN
  488.         SYSTEM.PUTREG(A0, h);
  489.         SYSTEM.PUTREG(D0, flags);
  490.         hSetState;
  491.         SYSTEM.GETREG(D0, err)
  492.     END HSetState;
  493. END MacMemoryMgr.
  494. TextControllers.StdCtrlDesc
  495. TextControllers.ControllerDesc
  496. Containers.ControllerDesc
  497. Controllers.ControllerDesc
  498. TextRulers.StdRulerDesc
  499. TextRulers.RulerDesc
  500. TextRulers.StdStyleDesc
  501. TextRulers.StyleDesc
  502. TextRulers.AttributesDesc
  503. Geneva
  504. Documents.ControllerDesc
  505.